package com.cman777.springc.redis.annotation;


import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * @author chenzhicong
 * @time 2019/11/10 15:48
 * @description 用于设置缓存但是响应的结果并会跟RedisCache一样直接返回缓存的结果
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface RedisCacheSet {
    /**
     * key的前缀
     * @return
     */
    @NotBlank
    String keyPrefix();

    /**
     * 盐
     * spel表达式
     * @return
     */
    @NotBlank
    String salt();

    /**
     * @return
     */
    @Min(1)
    long ttl();

    /**
     * 时间单位
     * @return
     */
    TimeUnit timeUnit() default TimeUnit.SECONDS;

    /**
     * 结果为null时，是否放入redis
     * @return
     */
    boolean allowNull() default false;


    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD})
    @Documented
     @interface List {
        RedisCacheSet[] value();
    }
}
